package com.doit.day06

import scala.util.Random

object _07_闭包 {
  def main(args: Array[String]): Unit = {

    val a:Int = 10

    //如果一个函数,访问到了它的外部（局部）变量的值，那么这个函数和他所处的环境,称为闭包
    def add(b:Int)={
      a+b
    }


    //简单的例子，了解一下闭包
    val fx = (a:Int,b:Int)=>{
      a+b
    }


    val fxx = (a:Int) => {
      (b:Int)=>a+b
    }

    val res = fxx(3)(10)


    val f = () => {
      var p = new Random().nextInt(10)

      val inner = () => {
        p += 1
        p
      }
      inner
    }

    val x1= f() //在这个里面就会生产一个随机数

    println(x1())
    println(x1())
    println(x1())
    println(x1())
    println(x1())

    println("-----------")

    val x2 = f()
    println(x2())
    println(x2())
    println(x2())






  }
}
